// 统一管理整个项目所有表单验证规则的地方
// 以后万一修改, 直接找这里修改后, 所有用到的地方都会被影响

export const loginRules = { // rules是规则对象
  mobile: [ // 规则名, 必须跟form对象的key名一致
    {
      pattern: /^1[3|4|5|6|7|8|9]\d{9}$/,
      required: true,
      message: '请输入正确的手机号',
      trigger: 'blur'
    }
  ],
  code: [
    {
      required: true,
      len: 6,
      message: '请输入6位证码',
      trigger: 'change'
    }
  ],
  check: [
    { // 正则只能判断字符串, 不能判断布尔类型
      // rule: 规则对象
      // value: 绑定标签要检验的值
      validator: (rule, value, callback) => {
        if (value === false) {
          callback(new Error('请勾选协议')) // 返回一个错误提示(类似于message的值)
        } else {
          callback()
        }
      },
      trigger: 'change' // checkbox只能写change事件
    }
  ]
}

// 发布文章-ArticleAdd.vue里表单验证规则
export const articleAddRules = { // 发布文章表单的校验规则
  title: [ // 规则名(必须和v-model的变量名一致)
    {
      min: 5,
      max: 30,
      required: true,
      message: '标题5到30字符',
      trigger: 'blur' // 在失去焦点触发验证规则
    }
  ],
  content: [
    { required: true, message: '内容必须填写', trigger: 'blur' }
  ],
  channel_id: [
    {
      required: true,
      trigger: 'blur',
      message: '频道必须选择'
    }
  ],
  cover: [
    { // 正则只能判断字符串, 不能判断布尔类型
      // rule: 规则对象
      // value: 绑定标签要检验的值 (article.cover的值: {type:xx, images: []})
      validator: (rule, value, callback) => {
        // 数组里不能有undefined
        if (value.images.indexOf(undefined) > -1) callback(new Error('图片数量对不上'))
        else if (value.type === value.images.length || value.type === -1) callback()
        // 数组的长度和type值对不上进else
        else callback(new Error('图片数量对不上'))
      }
    }
  ]
}

export const updateUserRules = {
  name: [
    {
      min: 1,
      max: 7,
      required: true,
      message: '昵称只能是1-7个字符',
      trigger: 'blur' // 在失去焦点触发验证规则
    }
  ],
  email: [
    {
      pattern: /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/,
      // type: 'email',
      required: true, // 必须填写
      trigger: 'blur',
      message: '邮箱格式不正确'
    }
  ]
}
